package com.umeox.iqibla.azkar.utils

import android.content.Context
import android.content.SharedPreferences

/**
 * Created by Rambo 2024/5/24/0024
 * Describe:
 */
object  SPUtils {

    private const val SP_NAME = "bead_style"
    const val KEY_CURRENT_STYLE = "current_style"

   private fun getSp(context: Context): SharedPreferences {
        return context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
    }

    /**
     * 通过SP获得boolean类型的数据，没有默认为false
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    fun getBoolean(context: Context, key: String?): Boolean {
        val sp = getSp(context)
        return sp.getBoolean(key, false)
    }

    /**
     * 通过SP获得boolean类型的数据，没有默认为false
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    fun getBoolean(context: Context, key: String?, defValue: Boolean): Boolean {
        val sp = getSp(context)
        return sp.getBoolean(key, defValue)
    }

    /**
     * 设置boolean的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    fun setBoolean(context: Context, key: String?, value: Boolean) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.putBoolean(key, value)
        edit.apply()
    }

    /**
     * 通过SP获得String类型的数据，没有默认为null
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    fun getString(context: Context, key: String?): String? {
        val sp = getSp(context)
        return sp.getString(key, null)
    }

    /**
     * 通过SP获得String类型的数据
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    fun getString(context: Context, key: String?, defValue: String?): String? {
        val sp = getSp(context)
        return sp.getString(key, defValue)
    }

    /**
     * 设置String的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    fun setString(context: Context, key: String?, value: String?) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.putString(key, value)
        edit.apply()
    }

    /**
     * 通过SP获得Long类型的数据，没有默认为-1
     *
     * @param context : 上下文
     * @param key     : 存储的key
     * @return
     */
    fun getLong(context: Context, key: String?): Long {
        val sp = getSp(context)
        return sp.getLong(key, -1)
    }

    /**
     * 通过SP获得Long类型的数据
     *
     * @param context  : 上下文
     * @param key      : 存储的key
     * @param defValue : 默认值
     * @return
     */
    fun getLong(context: Context, key: String?, defValue: Long): Long {
        val sp = getSp(context)
        return sp.getLong(key, defValue)
    }

    /**
     * 设置Long的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    fun setLong(context: Context, key: String?, value: Long) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.putLong(key, value)
        edit.apply()
    }

    /**
     * 设置Float的缓存数据
     *
     * @param context
     * @param key     :缓存对应的key
     * @param value   :缓存对应的值
     */
    fun setFloat(context: Context, key: String?, value: Float) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.putFloat(key, value)
        edit.apply()
    }


    fun getInt(context: Context, key: String?): Int {
        val sp = getSp(context)
        return sp.getInt(key, 0)
    }

    fun getInt(context: Context, key: String?, defValue: Int): Int {
        val sp = getSp(context)
        return sp.getInt(key, defValue)
    }

    fun setInt(context: Context, key: String?, value: Int) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.putInt(key, value)
        edit.apply()
    }

    fun remove(context: Context, key: String?) {
        val sp = getSp(context)
        val edit = sp.edit() // 获取编辑器
        edit.remove(key)
        edit.apply()
    }
}